package cn.akwangl.design.pattern.behavioral.templatemethod.v3;

/**
 * 含钩子方法的抽象类
 *
 * @author youyongkun
 * @date 2021/12/7 11:22
 */
public abstract class HookAbstractClass {
    /**
     * 模板方法
     *
     * @author youyongkun
     * @date 2021/12/7 11:22
     */
    public void TemplateMethod() {
        abstractMethod1();
        HookMethod1();
        if (HookMethod2()) {
            SpecificMethod();
        }
        abstractMethod2();
    }

    /**
     * 具体方法
     *
     * @author youyongkun
     * @date 2021/12/7 11:22
     */
    public void SpecificMethod() {
        System.out.println("抽象类中的具体方法被调用...");
    }

    /**
     * 钩子方法1
     *
     * @author youyongkun
     * @date 2021/12/7 11:22
     */
    public void HookMethod1() {
    }

    /**
     * 钩子方法2
     *
     * @author youyongkun
     * @date 2021/12/7 11:22
     */
    public boolean HookMethod2() {
        return true;
    }

    /**
     * 抽象方法1
     *
     * @author youyongkun
     * @date 2021/12/7 11:22
     */
    public abstract void abstractMethod1();

    /**
     * 抽象方法2
     *
     * @author youyongkun
     * @date 2021/12/7 11:22
     */
    public abstract void abstractMethod2();
}